package com.martain.leetcode.t216;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * 找出所有相加之和为n 的k个数的组合。组合中只允许含有 1 -9 的正整数，并且每种组合中不存在重复的数字。
 *
 * 说明：
 *
 * 所有数字都是正整数。
 * 解集不能包含重复的组合。
 * 示例 1:
 *
 * 输入: k = 3, n = 7
 * 输出: [[1,2,4]]
 * 示例 2:
 *
 * 输入: k = 3, n = 9
 * 输出: [[1,2,6], [1,3,5], [2,3,4]]
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/combination-sum-iii
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

public class T216 {

    List<List<Integer>> result = new ArrayList<>();
    public List<List<Integer>> combinationSum3(int k, int n) {
        LinkedList<Integer>  track = new LinkedList<>();
        backtrack(k,1,n,track);
        return result;
    }

    public void backtrack(int n, int start, int diff, LinkedList<Integer> track){
        if (n == 0){
            if (diff == 0)
            {
                result.add(new LinkedList(track));
            }
            return;
        }
        for (int i = start; i <= 9; i++) {
            track.add(i);
            backtrack(n-1,i+1,diff-i,track);
            track.removeLast();
        }

    }

    public static void main(String[] args) {
        T216 t216 = new T216();
        t216.combinationSum3(3,9);

    }

}
